"""
告警服务模块

该模块提供告警信息相关的业务逻辑处理，包括获取告警列表。
通过调用CRUD层进行数据操作，并处理业务逻辑和异常情况。
支持分页和过滤功能。
"""

import logging
from typing import List, Dict, Any, Optional
from app.models.alarm import Alarm
from app.crud.alarm import get_alarms, get_alarms_by_level, get_alarms_by_status
from sqlalchemy.orm import Session
from fastapi import HTTPException, status

logger = logging.getLogger(__name__)

class AlarmService:
    """告警服务类"""
    
    def __init__(self, db: Session):
        self.db = db
        logger.debug(f"创建AlarmService实例，数据库会话: {db}")
    
    def get_all_alarms(self, skip: int = 0, limit: int = 100, level: Optional[str] = None, status: Optional[str] = None) -> List[Dict[str, Any]]:
        """获取所有告警信息
        
        Args:
            skip (int): 跳过的记录数，默认为0
            limit (int): 返回的记录数限制，默认为100
            level (Optional[str]): 按级别过滤告警
            status (Optional[str]): 按状态过滤告警
            
        Returns:
            List[Dict[str, Any]]: 包含告警信息的字典列表
        """
        logger.info(f"获取告警信息: skip={skip}, limit={limit}, level={level}, status={status}")
        try:
            # 根据过滤条件获取告警
            if level:
                logger.debug(f"按级别过滤告警: {level}")
                alarms = get_alarms_by_level(self.db, level)
                # 手动应用分页
                alarms = alarms[skip:skip+limit]
            elif status:
                logger.debug(f"按状态过滤告警: {status}")
                alarms = get_alarms_by_status(self.db, status)
                # 手动应用分页
                alarms = alarms[skip:skip+limit]
            else:
                logger.debug("获取所有告警")
                alarms = get_alarms(self.db, skip, limit)
                
            result = [alarm.to_dict() for alarm in alarms]
            logger.info(f"成功获取 {len(result)} 条告警信息")
            return result
        except Exception as e:
            logger.error(f"获取告警信息列表时发生错误: {str(e)}")
            raise HTTPException(
                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
                detail="获取告警信息失败，请稍后重试"
            )